class Axios {
	request(configOrUrl, config={}){
		if(typeof configOrUrl === "string") config.url = configOrUrl;
		else config = configOrUrl;
		config.method = (config.method || "get").toLowerCase();
		const dispatchRequest = function(){
			return new Promise(function(resolve,reject){
				// 如果接收到的params有值，那么需要将其值转为urlencoded格式。
				// 将urlencoded格式与config.url进行拼接。
				if(config.params){
					// {a:1,b:2}====>a=1&b=2
					// /info?a=1&b=2
					// Object.keys(config.params);// ["a","b"]
					// Object.keys(config.params).map(key=>key+"="+config.params[key]);// ["a=1","b=2"]
					// Object.keys(config.params).map(key=>key+"="+config.params[key]).join("&");// a=1&b=2
					config.url += "?"+Object.keys(config.params).map(key=>key+"="+config.params[key]).join("&");
				}
				
				
				const request = new XMLHttpRequest();
				request.responseType = "json";
				request.open(config.method,config.url);
				request.send();
				request.onload = function(){
					resolve({
						// 配置对象信息
						config,
						// 响应头
						headers:request.getAllResponseHeaders(),
						// 响应体
						data:request.response,
						// XMLHttpRequest实例
						request,
						// 状态码
						status:request.status,
						// 状态码说明
						statusText:request.statusText
					})
				}
			})
		}
		return dispatchRequest();
	}
}
function createInstance() {
	const context = new Axios();
	const instance = Axios.prototype.request.bind(context);
	return instance;
}
const axios = createInstance();
export default axios;